#!/bin/bash

#Inicializa las variables del ambiente. Para esto se verifica que se haya instalado correctamente el sistema y que no se haya inicializado antes.

#PRECONDICION

# Existencia del archivo instalarT.conf
#
#	



##### FUNCIONES #########################################


# Loguea y muestra por pantalla
# Parámetros:
#	1-Mensaje
function echoLog() {
	./LoguearT.sh IniciarT $1 "$2";
	echo "$2";
}

# mostrarContenidoDir: Recibe un directorio y devuelve su contenido y el de sus subdirectorios
# Parámetros:
# 	1-Directorio a mostrar
function mostrarContenidoDir() {
	if [ -d "$1" ]; then
		IFSaux=$IFS
		IFS=$'\n'
		for i in `ls -R -1 "$1"`
		do
			IFS=$IFSaux
			echoLog I "$i"
			IFS=$'\n'
		done
		IFS=$IFSaux
	else
		echoLog I "$1:-";
	fi
}


#Recibe nombre de la variable a leer por parametro
function leerVariable() {
	

	./ConfigT.sh L $1
}

function mostrarVariables(){
	echoLog I "TP SO7508 1mer cuatrimestre 2012. Tema T Copyright © Grupo 05"
	echoLog I
	echoLog I "Librería del Sistema: CONFDIR: $CONFDIR "
	mostrarContenidoDir $CONFDIR
	#ls -1 -B $CONFDIR
	echoLog I
	echoLog I "Directorio de arribo de archivos externos: ARRIDIR: $ARRIDIR"
	echoLog I
	echoLog I "Directorio de grabación de los archivos externos rechazados:
	RECHDIR: $RECHDIR"
	echoLog I
	echoLog I "Directorio de instalación de los ejecutables: BINDIR: $BINDIR"
	mostrarContenidoDir $BINDIR
#	ls -1 -B $BINDIR
	echoLog I
	echoLog I "Directorio de instalación de los archivos maestros: MAEDIR: $MAEDIR"
	mostrarContenidoDir $MAEDIR
#	ls -1 -B $MAEDIR
	echoLog I
	echoLog I "Directorio de grabación de los logs de auditoria: LOGDIR: $LOGDIR"
	echoLog I
	echoLog I "Directorio de grabación de los reportes de salida: REPODIR: $REPODIR"
	echoLog I
	echoLog I "Extension del archivo de log: LOGEXT: $LOGEXT"
	echoLog I
	echoLog I "Tamaño maximo del archivo de log: LOGSIZE: $LOGSIZE"
	echoLog I 
	echoLog I "Espacio mínimo libre para el arribo de archivos externos: DATASIZE: $DATASIZE"
	echoLog I 
	echoLog I "Estado del Sistema: INICIALIZADO"


}

############## FIN DE DECLARACIONES DE FUNCIONES ################################


#1.Inicio de ejecucion

echo "1."
echo "Comando IniciarT Inicio de Ejecucion"

#Chequea que no se haya ejecutado antes.
if [ -z $INICIADO ]
then
#Comienza proceso de inicializacion

	#3.Seteo de variable PATH si corresponde
	if [ -z "$(echo "$PATH" | grep ":$(pwd)[^A-Za-z0-9%@_=./]*" )" ];
	then
		export PATH="$PATH:$(pwd)"
	fi


#4.Chequear que existen los archivos indispensables.
#Setear variables
#Revisa si existe archivo de configuracion
	./ConfigT.sh E;
	if [ "$?" == "0" ]; then

		faltaArchivoConf=0

		export GRUPO=`leerVariable GRUPO`

		CONFDIR=`leerVariable CONFDIR`

		ARRIDIR=`leerVariable ARRIDIR`

		RECHDIR=`leerVariable RECHDIR`

		BINDIR=`leerVariable BINDIR`

		MAEDIR=`leerVariable MAEDIR`	

		REPODIR=`leerVariable REPODIR`

		export	LOGDIR=`leerVariable LOGDIR`

		export	LOGEXT=`leerVariable LOGEXT`

		export	LOGSIZE=`leerVariable LOGSIZE`	

		DATASIZE=`leerVariable DATASIZE`
     
	else
	        faltaArchivoConf=1
	#	./LoguearT.sh IniciarT -E "Archivo de configuracion no encontrado."
		MAEDIR="undefinedMAEDIR"
		BINDIR="undefinedBINDIR"
		REPODIR="undefinedREPODIR"
		LOGDIR="undefinedLOGDIR"
		ARRIDIR="undefinedARRIDIR"
		RECHDIR="undefinedRECHDIR"
	fi
./LoguearT.sh IniciarT I "1."
./LoguearT.sh IniciarT I "Comando IniciarT Inicio de Ejecucion"

if [ $faltaArchivoConf -eq 1 ]
then
	echo "Archivo de configuracion no encontrado."
	return 1
fi
#Chequeo de instalacion completa
	
	instalacionIncompleta=0

	declare -a DIRECTORIOS_FALTANTES;
	declare -a DIRECTORIOS_EXISTENTES;
	for i in $(./ConfigT.sh L DIRECTORIOS);
	do
		if [ -d "$i" ]
		then
			echo "El directorio $i esta OK";
			DIRECTORIOS_EXISTENTES=( ${DIRECTORIOS_EXISTENTES[*]} "$i" );
		else
			echo "El directorio $i no existe";
			DIRECTORIOS_FALTANTES=( ${DIRECTORIOS_FALTANTES[*]} "$i" );
			instalacionIncompleta=1
		fi
	done

	declare -a COMPONENTES_FALTANTES;
	declare -a COMPONENTES_EXISTENTES;
	declare -a COMPONENTES_SIN_PERMISOS;
	for i in $(./ConfigT.sh L COMANDOS);
	do
		if [ -f "$BINDIR/$i" ]
		then
			if [ -x "$BINDIR/$i" ]
			then
				echo "El archivo $BINDIR/$i esta OK";
				COMPONENTES_EXISTENTES=( ${COMPONENTES_EXISTENTES[*]} "$i" );
			else
				echo "El archivo $BINDIR/$i no tiene permisos de ejecución";
				COMPONENTES_SIN_PERMISOS=( ${COMPONENTES_SIN_PERMISOS[*]} "$i" );
				instalacionIncompleta=1
			fi
		else
			echo "El archivo $BINDIR/$i no existe";
			COMPONENTES_FALTANTES=( ${COMPONENTES_FALTANTES[*]} "$i" );
			instalacionIncompleta=1
		fi
	done

	declare -a MAESTROS_FALTANTES;
	declare -a MAESTROS_EXISTENTES;
	for i in $(./ConfigT.sh L MAESTROS);
	do
		if [ -f "$MAEDIR/$i" ]
		then
			echo "El archivo maestro $MAEDIR/$i esta OK";
			MAESTROS_EXISTENTES=( ${MAESTROS_EXISTENTES[*]} "$i" );
		else
			echo "El archivo maestro $MAEDIR/$i no existe";
			MAESTROS_FALTANTES=( ${MAESTROS_FALTANTES[*]} "$i" );
			instalacionIncompleta=1
		fi
	done

	if [ $instalacionIncompleta -eq 1 ]
	then
		echoLog I "4.1"
		echoLog I "TP SO7508 1mer cuatrimestre 2012. Tema T Copyright © Grupo 05"
		echo

		echoLog I "Componentes existentes:";
		for i in "${COMPONENTES_EXISTENTES[@]}"; do
			echoLog I "Funcionalidad existente: $i";
		done
		for i in "${MAESTROS_EXISTENTES[@]}"; do
			echoLog I "Maestro existente: $i";
		done
		for i in "${DIRECTORIOS_EXISTENTES[@]}"; do
			echoLog I "Directorio existente: $i";
		done
		echoLog I
		echoLog I "Directorio de instalación de los ejecutables: BINDIR: $BINDIR"
		ls -1 -B $BINDIR 2> /dev/null
		echoLog I
		echoLog I "Directorio de instalación de los archivos maestros: MAEDIR: $MAEDIR"
		ls -1 -B $MAEDIR 2> /dev/null
		echoLog I
		echoLog I "Componentes faltantes:";
		for j in "${COMPONENTES_FALTANTES[@]}"; do
			echoLog I "Binario faltante: $j";
		done
		for j in "${COMPONENTES_SIN_PERMISOS[@]}"; do
			echoLog I "Binario sin permiso: $j";
		done
		for j in "${MAESTROS_FALTANTES[@]}"; do
			echoLog I "Maestro faltante: $j";
			./LoguearT.sh IniciarT SE 4
		done
		for j in "${DIRECTORIOS_FALTANTES[@]}"; do
			echoLog I "Directorio faltante: $j";
			./LoguearT.sh IniciarT SE 9
		done
		echoLog I
		echoLog I "Estado del Sistema: PENDIENTE de INSTALACION"
		echoLog I "Proceso de Inicialización Cancelado"

		unset GRUPO
		unset CONFDIR
		unset ARRIDIR
		unset RECHDIR
		unset BINDIR
		unset MAEDIR
		unset REPODIR
		unset LOGDIR
		unset LOGEXT
		unset LOGSIZE
		unset DATASIZE

		return 1

	fi
	
#Si todo esta bien termina de setear las variables

	export GRUPO
	export CONFDIR
	export ARRIDIR
	export RECHDIR
	export BINDIR
	export MAEDIR
	export REPODIR
	export LOGDIR
	export LOGEXT
	export LOGSIZE
	export DATASIZE

#Paso Final , mostrar todas las variables.
	echo "5."
	mostrarVariables

#Si DetectarT.sh no se esta ejecutando, lo invoca.

	detectarTPID=$(ps -eo pid,args | grep DetectarT | grep -v grep | cut -c1-5)
	echo "$detectarTPID"
	if [ -z "$detectarTPID" ];
	then
	#invocacion a DetectarT
		echo "$BINDIR"
		$BINDIR/StartD.sh
		if [ $? -eq 0 ]
		then
			detectarTPID=$(ps -eo pid,args | grep DetectarT | grep -v grep | cut -c1-5)
			echoLog I "6.1"
			echoLog I "Demonio corriendo bajo el Nro: <$detectarTPID>"
		else
			echoLog A "No se logró iniciar el demonio."
			./LoguearT.sh IniciarT E 11
			echo "Inténtelo manualmente ejecutando $BINDIR/StartD.sh"
		fi

	else
		echoLog A "No se logró iniciar el demonio. Otro demonio DetectarT ya se encuentra en ejecución."


		detectarTPID=""
	fi
	echo
	echoLog I "Proceso de Inicialización Concluido"

	export INICIADO="SI"	

else
	#Si ya fue inicializado muestra las variables y avisa.
	echoLog I "8."
	mostrarVariables
	echoLog A "No es posible efectuar una reinicializar el sistema."
	echoLog A "Proceso de Inicialización Cancelado"

fi

#LoguearT.sh IniciarT I "Proceso de Inicialización Concluido"
